package online.abor;

import java.util.ArrayList;

/**
 * 题目：一个数如果恰好等于它的因子之和，这个数就称为"完数"。例如6=1＋2＋3.编程找出1000以内的所有完数。
 */
public class Topic09_CompleteNumber {
    public static ArrayList<Integer> getCompleteNumbers(int minNumber,int maxNumber){
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = minNumber;i<=maxNumber;i++){
            ArrayList<Integer> factorsList = getFactors(i);
            if(factorsList == null){
                continue;
            }else {
                factorsList.remove((Integer) i);
            }
            int sum =0 ;
            for (Integer factor : factorsList) {
                sum += factor;
            }

            if(sum == i){
                list.add(i);
            }
        }
        return list;
    }

    /**
     * 获取数的所有因数，包括1和本身
     */
    public static ArrayList<Integer> getFactors(int value){
        ArrayList<Integer> list = new ArrayList<>();
        if(value==1){
            list.add(1);
            return list;
        }else if(value>1){
            list.add(value);
            list.add(1);
        }else {
            return  null;
        }

        for(int i=2;i<value;i++){
            if(value%i==0){
                list.add(i);
            }
        }
        return  list;
    }
}
